package main

import (
	"time"
	"fmt"
)

func calc(taskChan chan int, resChan chan int) {
	for v := range taskChan {
		// 判断是不是素数
		flag := true
		for i := 2; i < v; i++ {
			if v % i == 0 {
				flag = false
				break
			}
		}
		if flag {
			resChan <- v
		}
	}
}

func main() {
	intChan := make(chan int, 1000)
	// 这个也是个goroutine
	go func(){
		for i := 2; i < 100000; i++ {
			intChan <- i
		}
	}()  // 管道满了之后，这个匿名函数会阻塞，但是不影响程序继续往下走

	resultChan := make(chan int, 1000)
	// 同时起8个goroutine
	for i := 0; i < 8; i++ {
		go calc(intChan, resultChan)
	}

	// 再起一个取结果的goroutine，不阻塞主线程
	go func(){
		for v := range resultChan{
			fmt.Println("素数:", v)
		}
	}()
	// 给上面的匿名函数几秒钟来输出结果
	time.Sleep(time.Second * 5)
}